from core.llm import get_default_llm
from service.file_service import FileService
import logging
import json

logger = logging.getLogger(__name__)

async def generate_stream_response(file_service: FileService, data: str):
    """
    生成文件分析的流式响应
    
    Args:
        file_service: 文件服务实例
        data: 文件内容
        
    Yields:
        str: 流式响应数据
    """
    try:
        # 构建分析提示词
        prompt = f"""你是一个专业的教学文档分析助手，请对以下文档内容进行专业分析：

文档内容：
{data}

请从以下几个方面进行分析：
1. 文档的主要内容和主题
2. 文档的结构和组织方式
3. 重要的知识点和概念
4. 教学价值和适用场景
5. 改进建议和补充内容

请用中文回答，分析要全面深入，语言要专业清晰。
        """
        
        # 调用AI服务
        llm = get_default_llm()
        response = await llm.ainvoke(prompt)
        
        # 返回分析结果
        result = {
            "type": "analysis",
            "content": response.content,
            "summary": "文档分析完成"
        }
        
        yield f"data: {json.dumps(result, ensure_ascii=False)}\n\n"
        
    except Exception as e:
        logger.error(f"文件分析失败: {e}")
        error_result = {
            "type": "error",
            "content": f"文件分析失败: {str(e)}",
            "summary": "分析失败"
        }
        yield f"data: {json.dumps(error_result, ensure_ascii=False)}\n\n"

async def generate_outline_stream(file_content: str):
    """
    生成文档大纲的流式响应
    
    Args:
        file_content: 文件内容
        
    Yields:
        str: 流式响应数据
    """
    try:
        # 构建大纲生成提示词
        prompt = f"""你是一个专业的教学文档大纲生成助手，请根据以下文档内容生成详细的大纲：

文档内容：
{file_content}

请生成一个结构清晰、层次分明的大纲，包括：
1. 主要章节和子章节
2. 每个章节的核心要点
3. 知识点之间的逻辑关系
4. 教学重点和难点标注

请用中文回答，大纲要逻辑清晰，层次分明。
        """
        
        # 调用AI服务
        llm = get_default_llm()
        response = await llm.ainvoke(prompt)
        
        # 返回大纲结果
        result = {
            "type": "outline",
            "content": response.content,
            "summary": "大纲生成完成"
        }
        
        yield f"data: {json.dumps(result, ensure_ascii=False)}\n\n"
        
    except Exception as e:
        logger.error(f"大纲生成失败: {e}")
        error_result = {
            "type": "error",
            "content": f"大纲生成失败: {str(e)}",
            "summary": "生成失败"
        }
        yield f"data: {json.dumps(error_result, ensure_ascii=False)}\n\n"

async def generate_summary_stream(file_content: str):
    """
    生成文档摘要的流式响应
    
    Args:
        file_content: 文件内容
        
    Yields:
        str: 流式响应数据
    """
    try:
        # 构建摘要生成提示词
        prompt = f"""你是一个专业的教学文档摘要生成助手，请根据以下文档内容生成简洁的摘要：

文档内容：
{file_content}

请生成一个简洁明了的摘要，包括：
1. 文档的核心主题
2. 主要观点和结论
3. 关键知识点
4. 教学价值

请用中文回答，摘要要简洁明了，突出重点。
        """
        
        # 调用AI服务
        llm = get_default_llm()
        response = await llm.ainvoke(prompt)
        
        # 返回摘要结果
        result = {
            "type": "summary",
            "content": response.content,
            "summary": "摘要生成完成"
        }
        
        yield f"data: {json.dumps(result, ensure_ascii=False)}\n\n"
        
    except Exception as e:
        logger.error(f"摘要生成失败: {e}")
        error_result = {
            "type": "error",
            "content": f"摘要生成失败: {str(e)}",
            "summary": "生成失败"
        }
        yield f"data: {json.dumps(error_result, ensure_ascii=False)}\n\n" 
 
 